/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorSintatico.classe;

import compilador.analisadorLexico.PalavraReservada;
import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;

/**
 *
 * @author nelson
 */
public class TIPO extends Producao{

    @Override
    public SimboloGramatical derivar() throws Exception {
        //pega a instância do tokenReader
        TokenReader tokenReader =  TokenReader.getInstance();
        //consome o primeiro token
        Token t = tokenReader.seeCurrent();
        
        if(t.getAtributo().equals(PalavraReservada.CHAR)||
                t.getAtributo().equals(PalavraReservada.INT)){
            
            ((NaoTerminal) simbolo).add(new TIPO_PRIMITIVO().derivar());
        
        }else if(t.getTokenClass().equals(TokenClass.IDENTIFICADOR)){
            ((NaoTerminal) simbolo).add(new NOME().derivar());
        
        }else{
             erro("tipo inválido");
        }
        //retorna um símbolo
        return simbolo;
    }

    @Override
    public void setSimbolo() {
        simbolo = new NaoTerminal("TIPO");
    }
}